/**
 * LeetCode 7. 整数反转
 */
public class Solution_7 {
    /**
     * 数学
     * <p>
     * 时间复杂度：O(log|x|)，翻转的次数即 x 十进制的位数
     * <p>
     * 空间复杂度：O(1)
     */
    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            int digit = x % 10;
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && digit > 7)) {
                return 0;
            }
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && digit < -8)) {
                return 0;
            }
            ans = ans * 10 + digit;
            x /= 10;
        }
        return ans;
    }
}
